<?php
////////////////////////////////////////////////////////////////////////////
//                                                                        //
// NOTICE OF COPYRIGHT                                                    //
//                                                                        //
// Dean`s Office for Moodle                                               //
// Электронный деканат                                                    //
// <http://deansoffice.ru/>                                               //
//                                                                        //
// Copyright (C) 2008-2999  Alex Djachenko (Алексей Дьяченко)             //
// alex-pub@my-site.ru                                                    //
// Copyright (C) 2008-2999  Evgenij Cigancov (Евгений Цыганцов)           //
//                                                                        //
// This program is free software: you can redistribute it and/or modify   //
// it under the terms of the GNU General Public License as published by   //
// the Free Software Foundation, either version 3 of the Licensen.        //
//                                                                        //
// This program is distributed in the hope that it will be useful,        //
// but WITHOUT ANY WARRANTY; without even the implied warranty of         //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          //
// GNU General Public License for more details.                           //
//                                                                        //
// You should have received a copy of the GNU General Public License      //
// along with this program.  If not, see <http://www.gnu.org/licenses/>.  //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

//загрузка библиотек верхнего уровня
require_once(dirname(realpath(__FILE__))."/../../lib.php");
// устанавливаем контекст сайта (во всех режимах отображения по умолчанию)
// контекст имеет отношение к системе полномочий (подробнее - см. документацию Moodle)
// поскольку мы не пользуемся контекстами Moodle и используем собственную
// систему полномочий - все действия внутри блока dof оцениваются с точки зрения
// контекста сайта

$PAGE->set_context(context_system::instance());
// эту функцию обязательно нужно вызвать до вывода заголовка на всех страницах
require_login();

$depid = optional_param('departmentid', 0, PARAM_INT);
$addvars = array();
$addvars['departmentid'] = $depid;
//задаем первый уровень навигации
$DOF->modlib('nvg')->add_level($DOF->get_string('title'), $DOF->url_im('standard','/index.php', $addvars));

$DOF->modlib('nvg')->add_level($DOF->get_string('title', 'journal'), $DOF->url_im('journal','/index.php'),$addvars);

class dof_im_journal_view_person_info
{
    /**
     * @var dof_control
     */
    protected $dof;
    private $personid;
    public function __construct($dof, $personid)
    {
        $this->dof = $dof;
        $this->personid = $personid;
    }  

    /** 
     * Получит информацию о периодов ученика
     * @return array - возвращает запись периодов
    */
    public function get_info_student_age()
    {// выберем все id контрактов
        if ( ! $contracts = $this->get_student_contracts() )
        {
            return array();
        }
        //опишем массивы
        $mascontr = array();
        $masprogr = array();
        $masageid = array();
        $masage = array();

        foreach ($contracts as $val)
        {// массив id контрактов
            $mascontr[] = $val->id;
        }

        foreach ($mascontr as $id)
        {// для каждого id контракта найдем подписку
            $masprogr = $this->dof->storage('programmsbcs')->get_programmsbcs_by_contractid_ids($id);
            foreach ($masprogr as $val)
            {// для каждой подписки ещем периоды  
                $programmsbcid = $val;
                if ( $masage = $this->dof->storage('learninghistory')->get_subscribe_ages($programmsbcid) )
                {// создаём запись периодов
                    foreach ($masage as $val)
                    {// и записываем в массив
                        $masageid[] = $val;    
                    }
                }
            }
        }
              
        return $masageid;
    }
    
    /** Получить информацию об обучении
     * 
     * @return string - html-код списка
     */
    public function get_learning_info()
    {
        $result = '';
        if ( ! $contracts = $this->get_student_contracts() )
        {// нет контрактов - нет информации для вывода
            return '';
        }
        
        if ( ! $learninghistory = $this->get_info_student_age($this->personid) )
        {// ученик пока еще нигде не учился
            return '';
        }
        
        $result .= '<ul>';
        foreach ( $learninghistory as $record )
        {// выводим каждую итоговую ведомость как ссылку
            $result .= $this->get_finalgrades_link($record);
        }
        $result .= '</ul>';
        // выделим  в блок, если есть ЧТО выделять
        if ( $result )
        {
            $result = $this->dof->modlib('widgets')->print_box_start().
            $this->dof->get_string('finalgrades','journal').
            $result.
            $this->dof->modlib('widgets')->print_box_end(true);            
        }
        return $result;
        
    }
    
    /** Получить список всех контрактов ученика
     * 
     * @return array|false 
     */
    protected function get_student_contracts()
    {
        return $this->dof->storage('contracts')->get_list_by_student_age($this->personid);
    }
    
    /** Получить ссылку на просмотр информации об обучении за указанный период
     * 
     * @return string
     * @param object $learninghistory объект из таблицы leraninghistory
     */
    protected function get_finalgrades_link($learninghistory)
    {
        $depid = optional_param('departmentid', 0, PARAM_INT);
        $addvars = array();
        $addvars['departmentid'] = $depid;
        $programmname = '';
        if ( $programmsbc = $this->dof->storage('programmsbcs')->get($learninghistory->programmsbcid) )
        {
            $programmname = ' ('.$this->dof->storage('programms')->
                            get_field($programmsbc->programmid, 'name').')';
        }
        return '<li><a href="'.$this->dof->url_im('recordbook', '/finalgrades.php?programmsbcid='.
        $learninghistory->programmsbcid.'&ageid='.$learninghistory->ageid,$addvars) .'">'
        .$this->dof->storage('ages')->get_field($learninghistory->ageid, 'name').$programmname.'</a></li>';
    }
}

/** 
 * 
 * @author balyshev
 *
 */
class dof_im_journal_view_salfactors
{
    protected $dof;
    private $personid;
    private $begindate;
    private $enddate;
    
    public function __construct($dof, $personid)
    {
        $this->dof = $dof;
        $this->personid = $personid;
        
        // временные рамки
        $now = dof_gmgetdate(time());
        $this->begindate = mktime(dof_servertimezone(), 0, 0, $now['mon'], 1, $now['year']);
        $this->enddate   = mktime(dof_servertimezone(), 0, 0, $now['mon'], 25, $now['year']);
    }
    
    /** Таблицы с данными о персональной фактической нагрузке за месяц
     * @return string - html-код таблицы
     */
    public function get_table_salfactors()
    {
        $rez = '';
        if ( ! $appoints = $this->dof->storage('appointments')->get_appointment_by_persons(
                $this->personid) )
        {// нет назначений - выходим
            return '';
        }
        
        $ids = array();
        foreach ( $appoints as $appoint )
        {
            $ids[] = $appoint->id;
        }
        
        /*
        if ( ! empty($ids) )
        {// назначения есть - продолжаем
            $select = " appointmentid IN (".implode(',', $ids).") AND date > {$this->begindate} 
                    AND date < {$this->enddate} ";
            if ( ! $events = $this->dof->storage('schevents')->get_records_select($select) )
            {// нет событий - выходим
                return '';
            }
        }
        */
        
        // собираем данные
        $rez .= $this->get_part_string('prev', $ids);
        $rez .= $this->get_part_string('current', $ids);
        $rez .= $this->get_part_string('score', $ids);
       
        /*
        $scheventid = 17;
        if ( $scheventid <= 0 OR ! $schevent = $this->dof->storage('schevents')->get($scheventid) )
        {// событие не найдено, выводить нечего
            return '';
        }
    
        
        if ( ! isset($schevent->salfactorparts) OR empty($schevent->salfactorparts) )
        {// объект не существует или пуст - выходим
            return '';
        }
    
        $salfactorparts = unserialize($schevent->salfactorparts);
    
        if ( ! $cpasseds = $this->dof->storage('cpassed')->get_listing(
                array('cstreamid'=>$schevent->cstreamid, 'status'=>'active')) )
        {// нет активных подписок - выходим
            return '';
        }
        
        // коэф. подписок
        $salfactors = array();
        $fullnames = array();
        foreach ( $cpasseds as $cpassed )
        {// полное имя учеников и коэф. подписоk
            $salfactors[] = $this->dof->storage('programmsbcs')->get_field(
                    $cpassed->programmsbcid,'salfactor');
            $fullnames[] = $this->dof->storage('persons')->get_fullname($cpassed->studentid);
        }
        
        // коэф. на кол-во учеников
        $studentscount_sf = $salfactorparts->vars['config_salfactor_countstudents'];
        // коэф. предмета
        $programmitem_sf = $salfactorparts->vars['programmitem_salfactor'];
        // академические часы
        $ahours = $salfactorparts->vars['ahours'];
        // итоговый балл
        $rhours = $this->dof->storage('schevents')->get_field($scheventid, 'rhours');
         
        // заносим данные в таблицу
        $table->data = array();
        $data = array($programmitem_sf, implode('<br>', $fullnames), implode('<br>', $salfactors),
                $studentscount_sf, $ahours, $rhours);
        $table->data[] = $data;
        */
       
        return $rez;
    }
    
    /**
     * 
     * @param string $type - тип возвращаемого блока
     * @param array $appoints - id назначений
     * @return string
     */
    public function get_part_string($type, $appoints)
    {
        $rez = '';
        $tablename = 'dof_schevents';
        $table = new stdClass();
        $table->tablealign = "center";
        $table->cellpadding = 2;
        $table->cellspacing = 2;
        $table->align = array ("center","center","center","center","center","center");
        $table->head = $this->get_header();
        switch($type)
        {
            case 'prev':
                // события с 26 по 1 пред. месяца
                $begindate = $this->get_previous_begindate();
                $enddate = $this->begindate;
                
                print_object(mktime(0,0,0,8,27,2013));
                
                if ( ! empty($appoints) )
                {// назначения есть - продолжаем
                    $select = " appointmentid IN (".implode(',', $appoints).") AND date > {$begindate}
                        AND date < {$enddate} ";
                    if ( ! $events = $this->dof->storage('schevents')->get_records_select($select) )
                    {// нет событий - выходим
                            return '';
                    }
                }
                
                // данные для таблицы
                foreach ( $events as $event )
                {
                    $data = array();
                    $params = new stdClass();
                    if ( isset($event->salfactorparts) )
                    {// объект с коэф. создан - берем данные
                        $params = unserialize($event->salfactorparts);
                    
                        $data[] = dof_userdate($event->date, '%d/%m/%Y');
                        $duration = dof_gmgetdate($event->duration);
                        $data[] = $duration['hours'].':'.$duration['minutes'];
                        $data[] = $event->ahours;
                        $data[] = $params->vars['ahours'];
                        $data[] = $params->vars['config_salfactor_countstudents'] 
                                . '/' . $params->vars['count_all_cpassed'];
                        $data[] = $params->vars['programmitem_salfactor'];
                        $data[] = $params->vars['cstreams_salfactor'];
                        $data[] = $params->vars['schtemplates_salfactor'];
                        $data[] = $params->vars['agroups_salfactor'];
                        $data[] = $params->vars['schevents_completed']; 
                        $cstreamlink = "<a href=".$this->dof->url_im('cstreams', '/view.php',
                                array('id' => $event->cstreamid)).">".$this->dof->get_string(
                                'salfactors_cstreamlink_text', 'journal')."</a>";
                        $data[] = $cstreamlink; 
                        $data[] = $event->status;
                        $data[] = $event->rhours;
                    }else 
                    {// объекта нет - ставим данные по-умолчанию
                        $data[] = dof_userdate($event->date, '%d/%m/%Y');
                        $data[] = dof_userdate($event->duration, '%H:%i');
                        $data[] = $event->ahours;
                        $data[] = '';
                        $data[] = '';
                        $data[] = '';
                        $data[] = '';
                        $data[] = '';
                        $data[] = '';
                        $data[] = '';
                        $cstreamlink = "<a href=".$this->dof->url_im('cstreams', '/view.php',
                                array('id' => $event->cstreamid)).">".$this->dof->get_string(
                                        'salfactors_cstreamlink_text', 'journal')."</a>";
                        $data[] = $cstreamlink;
                        $data[] = $event->status;
                        $data[] = $event->rhours;
                    }
                    
                    $table->data[] = $data;
                }
                
                
                $rez .= "<br/><h3 align='center'>".$this->dof->get_string('salfactors_previous_month_amendment',
                        'journal')."</h3>";
                
                // создаем таблицу
                $rez .= $this->dof->modlib('widgets')->print_table($table,true);
                
                $rez .= "<br/><h3>".$this->dof->get_string('salfactors_previous_month_salary_forecast',
                        'journal')." = </h3>";
                
                $rez .= "<h3>".$this->dof->get_string('salfactors_previous_month_salary_infact',
                        'journal')." = </h3>";
                
                $rez .= "<br/><h3>".$this->dof->get_string('salfactors_previous_month_amendment',
                        'journal')." = </h3>";
                
                break;
            
            case 'current':
                // события с 1 по 25 текущего месяца
                $rez .= "<br/><h3 align='center'>".$this->dof->get_string('salfactors_current_month_rhours',
                        'journal')."</h3>";
                
                // создаем таблицу
                $rez .= $this->dof->modlib('widgets')->print_table($table,true);
                
                break;
            
            case 'score':
                
                break;
        }
        return $rez;
    }
    
    /**
     * 
     */
    private function get_previous_begindate()
    {
        $date = dof_gmgetdate($this->begindate);
        if ( $date['mon'] == 1 )
        {// текущий месяц январь - вернем декабрь, подправим год
            return mktime(0,0,0,12,26,$date['year']-1);
        }
        return mktime(0,0,0,$date['mon']-1,26,$date['year']);
    }
    
    /**
     * 
     * 
     */
    private function get_header()
    {
        return array(
                $this->dof->get_string('loadteacher_date_alt', 'journal'),
                $this->dof->get_string('loadteacher_duration', 'journal'),
                $this->dof->get_string('loadteacher_ahours', 'journal'),
                $this->dof->get_string('loadteacher_countstudents', 'journal'),
                $this->dof->get_string('loadteacher_programmitem', 'journal'),
                $this->dof->get_string('loadteacher_students', 'journal'),
                $this->dof->get_string('loadteacher_cstream', 'journal'),
                $this->dof->get_string('loadteacher_schtemplate', 'journal'),
                $this->dof->get_string('loadteacher_agroup', 'journal'),
                $this->dof->get_string('loadteacher_complete', 'journal'),
                $this->dof->get_string('loadteacher_cstreamlink', 'journal'),
                $this->dof->get_string('loadteacher_status', 'journal'),
                $this->dof->get_string('loadteacher_rhours', 'journal'));
    }
}


function dof_im_journal_get_date($time)
{
    $date = dof_usergetdate($time);
    return mktime(12,0,0,$date['mon'],$date['mday'],$date['year']);
}



?>